package gang.org.springframework.framework.bean;

import gang.org.springframework.framework.factory.GangConfigurableBeanFactory;
import gang.org.springframework.framework.factory.GangConstructorArgumentValues;

public interface GangBeanDefinition {

    int ROLE_INFRASTRUCTURE = 2;

    void setRole(int role);

    String getScope();

    /**
     * 业务意义：判断BeanDefinition对象是否为一个单例对象
     * @return boolean value
     * */
    boolean isSingleton();

    String SCOPE_SINGLETON = GangConfigurableBeanFactory.SCOPE_SINGLETON;

    String getBeanClassName();

    void setBeanClassName(String beanClassName);

    void setFactoryBeanName(String factoryBeanName);

    String getFactoryBeanName();

    /**
     * 业务意义？
     * @return XXX
     * */
    String getFactoryMethodName();

    /**
     * 业务意义？
     * @return  XXX
     * */
    GangConstructorArgumentValues getConstructorArgumentValues();

    /**
     * 业务意义？
     * @return XXX
     * */
    default boolean hasConstructorArgumentValues(){
        return false;
    }

    /**
     * 业务意义：判定BeanDefinition是否为一个抽象类
     * @return boolean value
     * */
    boolean isAbstract();

    /**
     *业务意义：判定BeanDefinition是否为一个非懒加载类
     *@return boolean value
     * */
    boolean isLazyInit();

    /**
     * 业务意义：获取BeanDefinition的父名称
     * @return 返回父definition bean名称，如果有
     * */
    String getParentName();

    void setScope(String scope);
}
